﻿using System.Collections.Generic;

namespace Algoritmia.DataStructures.Maps
{
    public interface IMap<TKey,TValue> : IEnumerable<KeyValuePair<TKey,TValue>>,ICountable
    {
        TValue this[TKey key] { get; set; }

        void Add(TKey key, TValue value);

        bool Contains(TKey key);

        TValue Get(TKey key, TValue defaultValue);

        ICollectionView<TKey> Keys();

        ICollectionView<KeyValuePair<TKey, TValue>> Items();

        bool Remove(TKey key);

        TValue SetDefault(TKey key, TValue defaultValue);

        ICollectionView<TValue> Values();

    }
}
